/**
 * 公用函数
 */

/**
 * 从URL连接中获取key为name的value
 * @param {Object} name
 */
function getQueryString(name) {
	var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
	var r = location.search.substr(1).match(reg);alert(r);
	if(r != null)
		return unescape(r[2]);
	return null;
}

/**
 * 添加
 * 
 * @param {Object} title 弹窗标题
 * @param {Object} url 打开的URL地址
 */
function add(title, url) {
	var index = layer.open({
		type: 2,
		title: title,
		shadeClose: false,
		shade: false,
		maxmin: true, //开启最大化最小化按钮
		area: ['893px', '600px'],
		content: url
	});
}

/**
 * 编辑
 * @param {Object} title 弹窗标题
 * @param {Object} url 打开的URL地址
 * @param {Object} id 实体ID
 */
function edit(title, url, id) {
	var index = layer.open({
		type: 2,
		title: title,
		shadeClose: false,
		shade: false,
		maxmin: true, //开启最大化最小化按钮
		area: ['893px', '600px'],
		content: contextPath + url + '?id=' + id
	});
}

/**
 * 改变数据状态
 * @param {Object} url 请求的地址
 * @param {Object} id 实体ID
 * @param {Object} status 实体当前状态
 * @param {Object} successFn 成功回调函数
 */
function changeStatus(url, id, status, successFn) {
	$.ajax({
		type: "post",
		url: contextPath + url,
		data: {
			id: id,
			status: status
		},
		success: function(data) {
			if(data.status = 200) {
				showSuccessMessage('操作成功!', successFn);
			} else {
				showFailMessage('操作失败失败!');
			}
		}
	});
}

/**
 * 删除
 * @param {Object} idList 要删除的id数组
 * @param {Object} url 请求URL
 * @param {Object} successFn 成功回调函数
 */
function del(idList, url, successFn) {
	if(!idList.length) {
		showFailMessage('没有数据被选中!');
		return false;
	}
	showConfirmMessage('确认要删除吗?', function() {
		$.ajax({
			type: "post",
			url: contextPath + url,
			data: {
				idlist: idList
			},
			success: function(data) {
				if(data.status = 200) {
					showSuccessMessage('删除成功!', successFn);
				} else {
					showFailMessage('删除失败!');
				}
			}
		});
	});
}

/**
 * 判断指定函数是否存在
 * @param {Object} funcName函数名
 */
function isExitsFunction(funcName) {
	try {
		if(typeof(funcName) == "function") {
			return true;
		}
	} catch(e) {}
	return false;
}

/**
 * 是否存在指定变量
 * @param {Object} variableName 变量名
 */
function isExitsVariable(variableName) {
	try {
		if(typeof(variableName) == "undefined") {
			return false;
		} else {
			return true;
		}
	} catch(e) {}
	return false;
}

/**
 * 显示右上角成功提示消息
 * @param {Object} message 消息
 * @param {Object} successFn 打开时回调
 * @param {Object} endFn 销毁时回调
 */
function showSuccessMessage(message, successFn, endFn) {
	successFn = isExitsFunction(successFn) ? successFn : function() {};
	endFn = isExitsFunction(endFn) ? endFn : function() {};
	layer.alert(message, {
		icon: 6,
		title: '成功',
		time: 2000,
		shade: 0,
		btn: 0,
		succss:successFn,
		end: endFn,
		offset: ['40px', ($(window).width() - 300) + 'px']
	});
}

/**
 * 显示右上角失败提示消息
 * @param {Object} message 消息
 * @param {Object} successFn 打开时回调
 * @param {Object} endFn 销毁时回调
 */
function showFailMessage(message, successFn, endFn) {
	successFn = isExitsFunction(successFn) ? successFn : function() {};
	endFn = isExitsFunction(endFn) ? endFn : function() {};
	layer.alert(message, {
		icon: 5,
		title: '失败',
		time: 2000,
		shade: 0,
		btn: 0,
		succss:successFn,
		end: endFn,
		offset: ['40px', ($(window).width() - 300) + 'px']
	});
}

/**
 * 显示右上角询问提示消息
 * @param {Object} message 询问消息
 * @param {Object} sureFn 确定按钮回调
 * @param {Object} cancelFn 取消按钮回调
 */
function showConfirmMessage(message, sureFn, cancelFn) {
	sureFn = isExitsFunction(sureFn) ? sureFn : function() {};
	cancelFn = isExitsFunction(cancelFn) ? cancelFn : function() {};
	layer.confirm(message, {
		btn: ['确定', '取消'],
		icon: 3,
		title: '温馨提示',
		shade: 0,
		shift: 6,
		offset: ['40px', ($(window).width() - 300) + 'px']
	}, sureFn, cancelFn);
}


/**
 * 刷新DT
 */
function reloadTable() {
	$('#listTable').DataTable().ajax.reload();
}

/**
 * 获取datatables选中行的ID
 */
function getDTSelect() {
	var lines = datatable.rows('.selected').data();
	for (var i = 0; i < lines.length; i++) {
		idList.push(lines[i].id);
	}
	return idList;
}

/**
 * datatables优化
 */

/** 
 * 对Date的扩展，将 Date 转化为指定格式的String
 * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q)可以用 1-2 个占位符 
 * 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
 *eg: 
 * (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S")==> 2006-07-02 08:09:04.423
 * (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04      
 * (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04      
 * (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04      
 * (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18      
 */
Date.prototype.pattern = function(fmt) {
	var o = {
		"M+": this.getMonth() + 1, //月份         
		"d+": this.getDate(), //日         
		"h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, //小时         
		"H+": this.getHours(), //小时         
		"m+": this.getMinutes(), //分         
		"s+": this.getSeconds(), //秒         
		"q+": Math.floor((this.getMonth() + 3) / 3), //季度         
		"S": this.getMilliseconds() //毫秒         
	};
	var week = {
		"0": "/u65e5",
		"1": "/u4e00",
		"2": "/u4e8c",
		"3": "/u4e09",
		"4": "/u56db",
		"5": "/u4e94",
		"6": "/u516d"
	};
	if(/(y+)/.test(fmt)) {
		fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
	}
	if(/(E+)/.test(fmt)) {
		fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "/u661f/u671f" : "/u5468") : "") + week[this.getDay() + ""]);
	}
	for(var k in o) {
		if(new RegExp("(" + k + ")").test(fmt)) {
			fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
		}
	}
	return fmt;
}

// js数组拓展方法
Array.prototype.indexOf = function(val) {
	for(var i = 0; i < this.length; i++) {
		if(this[i] == val)
			return i;
	}
	return -1;
};
Array.prototype.remove = function(val) {
	var index = this.indexOf(val);
	if(index > -1) {
		this.splice(index, 1);
	}
};

/**
 * 
 * @param {Object} btns 操作按钮数组
 * @param {Object} id 实体ID
 * @param {Object} jsp jsp地址
 * @param {Object} otherParam 其它的参数
 * @param {Object} url ajax地址
 * @param {Object} fn 回调函数
 */
function getDTOperateBtn(btns, id, jsp, otherParam, url, fn) {
	
	var html = '';
	if(contains(btns, 'review')) {
		var icon, text;
		switch(otherParam) {
			case 0:
				icon = '&#xe603;';
				text = '待发布';
				break;
			case 1:
				icon = '&#xe6dc;';
				text = '上架';
				break;
			case 2:
				text = '下架';
				icon = '&#xe6de;';
				break;
			case 3:
				text = '停用';
				icon = '&#xe631;';
				break;
			case 4:
				text = '短信邀请';
				icon = '&#xe63b;';
				break;
		}
		html += '&nbsp;<a title="' + text + '" href="javascript:;" onclick="review(' + id + ',' + otherParam + ')" style="text-decoration:none"><i class="Hui-iconfont">' + icon + '</i></a>&nbsp;';
	}
	if(contains(btns, 'newTabEdit')) {
		html += '&nbsp;<a data-title="编辑" href="javascript:;" _href="' + jsp + '?id=' + id + '" onclick="Hui_admin_tab(this)" style="text-decoration:none"><i class="Hui-iconfont">&#xe6df;</i></a>&nbsp;';
	}
	if(contains(btns, 'edit')) {
		html += '&nbsp;<a title="编辑" href="javascript:;" onclick="edit(\'编辑\',\'' + jsp + '\',' + id + ',\'700\',\'480\')" style="text-decoration:none"><i class="Hui-iconfont">&#xe6df;</i></a>&nbsp;';
	}
	if(contains(btns, 'reply')) {
		html += '&nbsp;<a title="回复" href="javascript:;" onclick="edit(\'回复\',\'' + jsp + '\',' + id + ',\'700\',\'480\')" style="text-decoration:none"><i class="Hui-iconfont">&#xe6c5;</i></a>&nbsp;';
	}
	if(contains(btns, 'download')) {
		html += '&nbsp;<a title="下载" href="javascript:;" onclick="downloadFile(' + id + ',\'' + otherParam + '\')" style="text-decoration:none"><i class="Hui-iconfont">&#xe641;</i></a>&nbsp;';
	}
	if(contains(btns, 'del')) {
		html += '&nbsp;<a title="删除" href="javascript:;" onclick="del([' + id + '],\'' + url + '\',' + fn + ')" style="text-decoration:none"><i class="Hui-iconfont">&#xe609;</i></a>&nbsp;';
	}
	return html;
}

/**
 * 元素obj时候存在于array中
 *
 * @param {Object} array
 * @param {Object} obj
 */
function contains(array, obj) {
	var i = array.length;
	while(i--) {
		if(array[i] === obj) {
			return true;
		}
	}
	return false;
}